package cn.lili.modules.promotion.service;

import cn.lili.common.vo.PageVO;
import cn.lili.modules.promotion.entity.dos.GreenContributionInfo;
import cn.lili.modules.promotion.entity.dos.GreenCount;
import cn.lili.modules.promotion.entity.vos.GreenContributionInfoVO;
import cn.lili.modules.promotion.entity.vos.GreenCountVO;
import cn.lili.modules.promotion.entity.vos.GreenUserVO;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.pojos.GOrder;
import io.swagger.annotations.ApiModelProperty;

import java.math.BigDecimal;

/**
 * @author xiangqian
 * @version 1.0
 * @data 2023/12/18 14:16
 * <p>
 * 绿色积分池-统计
 */
public interface GreenCountService extends IService<GreenCount> {

    /**
     * 查询绿色积分统计数据
     */
    GreenCountVO getGreenCount();

    /**
     * 查询贡献值统计数据
     */
    GreenContributionInfoVO getContributionCount();

    /**
     * 分页查询贡献值列表
     *
     * @param greenCount 查询条件{@link GreenCount}
     * @param page       分页条件{@link PageVO}
     * @return 分页返回结果
     */
    Page<GreenCount> contributionPage(GreenCount greenCount, PageVO page);

    /**
     * H5-绿色积分首页
     *
     * @param openId 用户openId
     * @param userId 用户userID
     * @return 返回结果
     */
    GreenUserVO home(String openId, String userId);

    /**
     * 绿色积分明细(绿色积分管理-用户)
     *
     * @param gOrder 查询条件{@link GOrder}
     * @param page   分页条件{@link PageVO}
     * @return 分页返回结果
     */
    Page<GOrder> getGreenInfo(GOrder gOrder, PageVO page);

    /**
     * 冻结/解冻绿色积分(绿色积分管理-用户)
     *
     * @param openId  用户openId
     * @param payType 冻结状态 0 解冻， 1 只允许进不允许出， 2 进出都不允许，直接禁用
     * @return 冻结结果
     */
    JSONObject greenFreeze(String openId, Integer payType);

    /**
     * 领取奖金
     *
     * @param contributionAllValue 要领取的贡献值
     * @param userId               用户ID
     */
    Boolean getBonus(BigDecimal contributionAllValue, String openId, String userId);

    /**
     * 计算可得绿色积分
     *
     * @param contributionAllValue 要领取的贡献值
     */
    BigDecimal computeBonus(BigDecimal contributionAllValue);

    /**
     * 自动分红
     *
     * @return 返回结果
     */
    Boolean autoDividend();

    /**
     * 查询我的绿色贡献值
     * @param userId
     * @return
     */
    Double getContributionAllValueByUserId(String userId);

    /**
     * 查询我的待结算绿色积分
     * @param userId
     * @return
     */
    Double getSettleUmberByUserId(String userId);

    /**
     * 运营中心-绿色积分明细
     */
    Page<GOrder> getGreenDetailPage(PageVO page);
}
